package controllers;

import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import play.*;

import views.html.pageErreurConnexion;
import views.html.ConsoleAdmin.*;

import models.*;

/**
 * Manage a database of chapitres
 */
public abstract class AdminChapitre extends Controller {

	/**
	 * This result directly redirect to application home.
	 */
	public static final Result GO_HOME = redirect(routes.AdminChapitre
			.listChapitre(0, "libelle_c", "asc", ""));

	/**
	 * Handle default path requests, redirect to chapitres list
	 */
	public static Result indexChapitre() {
		if (Application.estAdmin()) {
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the paginated list of chapitres.
	 * 
	 * @param page
	 *            Current page number (starts from 0)
	 * @param sortBy
	 *            Column to be sorted
	 * @param order
	 *            Sort order (either asc or desc)
	 * @param filter
	 *            Filter applied on chapitre names
	 */
	public static Result listChapitre(final int page, final String sortBy,
			final String order, final String filter) {
		if (Application.estAdmin()) {
			return ok(listChapitre2.render(
					Chapitre.page(page, 10, sortBy, order, filter), sortBy,
					order, filter));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'edit form' of a existing Chapitre.
	 * 
	 * @param id
	 *            Id of the chapitre to edit
	 */
	public static Result editChapitre(final Long id) {
		if (Application.estAdmin()) {
			final Form<Chapitre> chapitreForm = form(Chapitre.class).fill(
					Chapitre.findById(id));
			return ok(editChapitre.render(id, chapitreForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'edit form' submission
	 * 
	 * @param id
	 *            Id of the chapitre to edit
	 */
	public static Result updateChapitre(final Long id) {
		if (Application.estAdmin()) {
			final Form<Chapitre> chapitreForm = form(Chapitre.class)
					.bindFromRequest();
			if (chapitreForm.hasErrors()) {
				return badRequest(editChapitre.render(id, chapitreForm));
			}
			chapitreForm.get().update(id);
			flash("success", "Chapitre " + chapitreForm.get().getLibelleC()
					+ " has been updated");
			Logger.debug("Mise à jour chapitre : "
					+ chapitreForm.get().getIdChapitre() + " "
					+ chapitreForm.get().getLibelleC() + " par user "
					+ session().get("id"));
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'new chapitre form'.
	 */
	public static Result createChapitre() {
		if (Application.estAdmin()) {
			final Form<Chapitre> chapitreForm = form(Chapitre.class);
			return ok(createChapitre.render(chapitreForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'new chapitre form' submission
	 */
	public static Result saveChapitre() {
		if (Application.estAdmin()) {
			final Form<Chapitre> chapitreForm = form(Chapitre.class)
					.bindFromRequest();
			if (chapitreForm.hasErrors()) {
				return badRequest(createChapitre.render(chapitreForm));
			}
			chapitreForm.get().save();
			flash("success", "Chapitre " + chapitreForm.get().getLibelleC()
					+ " has been created");
			Logger.debug("Création chapitre : "
					+ chapitreForm.get().getIdChapitre() + " "
					+ chapitreForm.get().getLibelleC() + " par user "
					+ session().get("id"));
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle chapitre deletion
	 */
	public static Result deleteChapitre(final Long id) {
		if (Application.estAdmin()) {
			final Chapitre c = Chapitre.findById(id);
			flash("success", "Chapitre has been deleted");
			Logger.debug("Suppression chapitre : " + c.getIdChapitre() + " "
					+ c.getLibelleC() + " par user " + session().get("id"));
			Chapitre.delete(id);
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}
}
